package cn.biplam.front.template.control;

import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.KvMap;
import cn.biplam.common.wrapper.UserInfo;
import cn.biplam.front.component.data.tree.treebase.TreeDC;
import cn.biplam.front.component.data.tree.treebase.Tree_Type.Tree_NodeType_Commen;
import cn.biplam.front.html.base.HtmlWindow;
import cn.biplam.front.template.callback.ITreeCallBack;

/**
 * 树模版接口类
 *   <li>设置树的参数信息
 *   <li>获取树的页面对象
 * @author WangSong 2009-10-12下午02:13:06
 * @version 1.0
 */
public interface ITreeBase {
	
	/**
	 * 设置树DC-父子表、自定义、索引表
	 * @param treeDc
	 * @param callback 用于返回生成树节点时需要的参数
	 * @throws ErrorMessage
	 */
	public void putTreeDc(int treeIndex,
						  TreeDC treeDc,
			              ITreeCallBack callback) throws ErrorMessage ; 
	
	/**
	 * 设置右键菜单项(根据树的编号和节点类型来设置右键菜单项)
	 * @param treeIndex 树编号
	 * @param nodeType 可用此右键菜单项的节点类型
	 * @param actionId 右键菜单项的actionId
	 * @param text 右键菜单项的名称，此处用的是captionId
	 * @throws ErrorMessage
	 */
	public void putRightMenuItem(int treeIndex,
								 Tree_NodeType_Commen nodeType,
			                 	 String actionId,
			                 	 String text) throws ErrorMessage ;
	
	/**
	 * 设置右键菜单项(根据树的编号和节点类型来设置右键菜单项)
	 * @param treeIndex 树编号
	 * @param nodeType 可用此右键菜单项的节点类型
	 * @param actionId 右键菜单项的actionId
	 * @param text 右键菜单项的名称，此处用的是captionId
	 * @throws ErrorMessage
	 */
	public void putRightMenuItem(int treeIndex,
								 String nodeType,
			                 	 String actionId,
			                 	 String text) throws ErrorMessage ;
	
	/**
	 * 设置右键添加的级联操作operatorId
	 * @param treeIndex 树的节点类型
	 * @param operatorId  添加的级联操作operatorId
	 */
	public void setExtraOperatorIdAdd(int treeIndex,
									  String operatorId) throws ErrorMessage ;
	
	/**
	 * 设置右键修改的级联操作operatorId
	 * @param treeIndex 树编号
	 * @param operatorId 修改的级联操作operatorId
	 */
	public void setExtraOperatorIdModify(int treeIndex,
										 String operatorId) throws ErrorMessage ;
	
	/**
	 * 设置右键删除的级联操作operatorId
	 * @param treeIndex 树编号
	 * @param operatorId 修改的级联操作operatorId
	 */
	public void setExtraOperatorIdDelete(int treeIndex,
										 String operatorId) throws ErrorMessage ;
	
	/**
	 * 设置右键菜单是否显示
	 * @param show  true显示 false不显示
	 */
	public void setRightMenu(boolean show);
	
	/**
	 * 设置是否显示复选框
	 * @param show true显示 false不显示
	 */
	public void setShowCheckBox(boolean show);
	
	/**
	 * 设置需要展开的节点的Id
	 * @param extendNodeId 需要展开的节点Id
	 * @param extendNodeLevel 需要展开节点的级别 
	 */
	public void setExtendNodeID(String extendNodeId,String extendNodeLevel);
	
	/**
	 * 设置树的自定义param （取时用params.getByKey(".customerParam")）
	 * @param customerParam
	 */
	public void setCustomerParam(String customerParam);
	
	/**
	 * 页面直接调用接口(用于非Ajx请求时,获取页面对象)
	 * 第一次生成业务模型树时调用
	 * @param mUser 用户信息
	 * @param sHomeUrl 系统路径
	 * @param cId 调用者的容器id
	 * @return HtmlWindow 显示树的HtmlWindow
	 * @throws ErrorMessage
	 */
	public HtmlWindow get(UserInfo mUser, 
			              String sHomeUrl,
			              String pcId) throws ErrorMessage ;
	
	/**
	 * 用于Ajx请求时,获取树的页面对象
	 * @param mUser 用户信息
	 * @param sHomeUrl 系统路径
	 * @param params ajx传来的参数集合
	 * @return HtmlWindow 显示树的HtmlWindow
	 * @throws ErrorMessage
	 */
	public HtmlWindow ajxGet(UserInfo mUser,
							 String sHomeUrl,
							 KvMap<String,String> params) throws ErrorMessage;
}
